9 תשובות
שלום, יוני (?).
קודם כול, כדאי מאוד לשנות את כותרת השאלה למשהו אחר מ"שאלה חשובה", כדי שאנשים יבינו על מה השאלה.
השאלה עצמה לא כל כך ברורה - אתה רוצה ללמוד איך לפתח טופס HTML או שאתה רוצה לדעת איך לאחסן תמונה בבסיס נתונים?
XHTML אני יודע אני רוצה לדעת איך נראה התמונה במסד נתונים ואיך מעלים לשם בכלל ואיך גורמים לזה שיהיה רק תמונות
אתה צריך לאחסן אותה בצורה הבינרית שלה, ואת זה אתה יכול לעשות בעמודה מסוג blob. כשאתה רוצה להדפיס אותה ללקוח, פשוט תוסיף header של סוג התמונה, והדפדפן כבר ידע איך לפענח את זה. קרא את המאמר הבא.
ערכתי את השאלה שלך. עכשיו היא ברורה יותר. :-)
עדיף להעלות את התמונה לתיקיה כלשהיא ולאחסן רק את הנתיב שלה .
ככה אתה לא מעמיס על המסד ...
איך עושים את זה? בקשור מסוים משלו כל פעם לפתוח? אני מתכנת PHP בינוני ואין לי רעיון לפתרון
אתה יכול כמו שאמרו, לשמור את התמונה בתיקייה מסויימת ואז בטבלה שלך בבסיס נתונים, לשמור את המיקום של התמונה
לדוגמא: images/cool_picture.png,
ואז עם PHP לשלוף את הכתובת של התמונה מהבסיס לתוך תגית img בצורה כזאת לדוגמא:
echo '<img src="'. $dbRow['image'] .'" />';
?>
ככה אתה פשוט פותח את התמונה ששמורה על השרת בעעזרת הנתיב שלה ששמור בתוך הבסיס נתונים.
חסרון אחד של הדרך הזאת הוא שאם התמונה נמחקת, הנתיב עדיין קיים ולכן יש צורך לבדוק אם גם הקובץ עדיין קיים כדי שלא יהיו קוביות ריקות במקום תמונות.
יש עוד דרך שהשתמשתי בה פעם ואיתה אתה פשוט שומר את התמונה עצמה בטבלה,
מה שעושים זה לקרוא את הקובץ של התמונה עם PHP, להצפין אותו בעזרת הפונקציה base64_encode ולשמור את זה בבסיס הנתונים, תצא מחרוזת ארוכה כזאת שאפשר לשמור כטקסט.
כשתרצה להציג את התמונה תכניס את המחרוזת לתוך תג img בצורה הבאה:
$image = file_get_contents('images/cool_picture.png');
$image = base64_encode($image);
echo '<img src="data:image/png;base64,'. $image .'" />';
?>
בהנחה שזו תמונה מסוג png כמובן, לסוגים אחרים פשוט אפשר לשנות את השם בקוד.
השיטה הזאת טובה אם אתה רוצה לצמצם בקשות מהשרת, אבל מצד שני היא מנפחת את הגודל של העמוד.
היתרונות והחסרונות של שמירת תמונות במערכת קבצים לעומת שמירתן בבסיס נתונים נמצאים במאמר שאליו הפניתי אותך.
אל תשכח שאם אין לך בעיה שהתמונה תהיה בקובץ נפרד ("כאילו" היא כן במערכת הקבצים), אתה לא צריך להשתמש ב-base64. :-)
אוקיי אני רוצה את זה על מנת לבנות פינה שאנשים יכולים להעלות אליה תמונות אז מה שאני צריך לעשות זה מה שהשני כי אני רוצה שישמר על הבסיס נתונים ויראה לכולם אבל אני צריך לשנות מהמשתנה של הIMAGES למשתנה $_FILE כי הם יעלו מהמחשב אז זו הדרך? ואיך עושים שיוכלו להעלות רק תמונות רגילות.?